#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

int main()
{
    pid_t id = fork();
    if(id < 0)
    {
        perror("fork");
        return 1;
    }
    else if(id == 0)
    {
        // child
        int cnt = 5;
        while(cnt)
        {
            printf("我是子进程, pid:%d, ppid:%d, cnt:%d\n", getpid(), getppid(), cnt--);
            sleep(1);
            int a = 10;
            a /= 0;
        }
        exit(10); // 子进程退出
    }
    // parent
    //sleep(10);
    //pid_t ret = wait(NULL); // 不关系子进程退出的结果
    int status = 0;
    pid_t ret = waitpid(id, &status, 0);
    if(ret > 0)  // 等待成功
    {
        printf("wait success:%d, signal number:%d, child exit code:%d\n", ret, (status & 0x7F), (status >> 8) & 0xFF);
    }
    sleep(5);

    return 0;
}

//int AddToVal(int from, int to)
//{
//    int sum = 0;
//    for(int i = from; i < to; ++i)
//    {
//        sum += i;
//    }
//    //_exit(31);
//    return sum;
//}

//int main()
//{
//    printf("hello world");
//    sleep(2);
//    _exit(1);
    


    //printf("hello world\n");
    
    //int ret = AddToVal(0, 100);
    //printf("ret = %d\n", ret);


    //for(int i = 0; i < 200; ++i)
    //{
    //    printf("%d:%s\n", i, strerror(i));
    //}

    //int ret = AddToVal(1, 100);
    //if(ret != 5050)
    //{
    //    return 1;
    //}
//    return 0;
//}
